/**
 * Definition for a binary tree node.
 * type TreeNode struct {
 *     Val int
 *     Left *TreeNode
 *     Right *TreeNode
 * }
 */
func levelOrderBottom(root *TreeNode) [][]int {
    res := [][]int{}
    if root == nil {
        return res
    }

    // 初始化队列
    st := list.New()
    st.PushBack(root)

    // 临时存放数组
    tempArr := []int{}
    
    // 处理队列
    for st.Len() > 0 {
        // 记录当前层节点的数量
        length := st.Len()
        
        // 遍历节点处理
        for i:=0; i<length; i++{
            // 拿到节点，将值存放起来
            node := st.Remove(st.Front()).(*TreeNode)
            tempArr = append(tempArr, node.Val)
            // 处理左节点
            if node.Left != nil {
                st.PushBack(node.Left)
            }
            // 处理右节点
            if node.Right != nil {
                st.PushBack(node.Right)
            }
        }
        // 添加每层结果集
        res = append(res, tempArr)
        // 清空临时缓存
        tempArr = []int{}
    }

    // 反转结果集
    for i:=0; i<len(res)/2; i++ {
        res[i], res[len(res)-i-1] = res[len(res)-i-1], res[i]
    }

    return res
}